package com.tedu.api.io;

import org.testng.annotations.Test;

import java.io.*;

/**
 * IO流--传对象--高级流
 * ObjectOutput          对象输出流--传Person。java对象--写操作
 * ObjectInputStream      对象输入流--传
 */

public class ObjectIO {
    /**
     * objectOutputStream  对象输出流
     * 使用方法:1.创建实现序列化接口的对象
     */
    @Test
    public void testOOS() throws IOException {
        //1.创建对象
        Person p=new Person();
        p.setName("");
        //数组--动态数组
        //String【】 str={"","2',"3"};  静态动态数组
        //  String[] str=new String[]{"1"}
        p.setSay(new String[]{""});
        System.out.println(""+p);
        //对象输出写出文件
        FileOutputStream fos=new FileOutputStream("person.obj");
        ObjectOutputStream oos=new ObjectOutputStream(fos);
        /**
         * writeObject(Object obj)   --lijie:xiechu1duix
         *该方法会将给定对象安扎奥其结构进行转换
         * 转换为一组字节，在通过其处理的流写出
         *
         * 写出文件专业术语
         * 1.通过对象输出六将person类，先转换为一组组字节这个过程【对象序列化】
         * 2.将序列化这季节通过字节流【低级六】写入文件中
         * 【硬盘上】做长久保存，这个过程【数据持久化】
         * person。obj持久化保存在硬盘上
         */
        oos.writeObject(p);
        System.out.println("写出成功");

    }
    /**
     * ObjectInputStream   对象输入流
     * 序列化将对象转换为二进制
     *
     * 反序列化：二进制转换为对象
     * readObject（）  fanhui1duqu1de1duixian
     * 需求：将序列化person。obj文件person按照方式读入
     */
    @Test
    public void testOIS() throws IOException, ClassNotFoundException {
        //创建低级流
        FileInputStream fis=new FileInputStream("person.obj");
        //创建高级流--对象读入
        ObjectInputStream ois=new ObjectInputStream(fis);
        //readObject()  获取对象【饭序列化操作：二进制转换为对象】
        System.out.println(ois.readObject());
        System.out.println("反序列化成功");
    }
}










































